可链式调用的修饰符

modifiers 是一个支持链式调用的视图修饰器集合,允许你为同一个视图应用多个修饰器,并以严格的顺序依次执行。

与传统 TSX 中每个视图只能通过一个 modifier 属性传入单个修饰器不同,modifiers 支持:

  • 同一种修饰器的重复使用(例如多个 padding()background()
  • 明确控制修饰器的应用顺序
  • 更贴近 SwiftUI 的声明方式和效果

类型定义

1declare function modifiers(): ViewModifiers;
2
3declare class ViewModifiers {
4  padding(value): this;
5  background(value): this;
6  opacity(value): this;
7  frame(value): this;
8  font(value): this;
9  // ... 还有更多方法(同 `CommonViewProps` 的属性)
10}

ViewModifiers 是一个可链式调用的类,内部方法对应 SwiftUI 中的各类 View Modifier。每个方法返回自身(this),以支持流式调用。


使用优势

  • 支持多次使用相同修饰器 如:连续嵌套多个 .padding().background(),可表达更加丰富的 UI 层级。

  • 明确的顺序控制 修饰器按调用顺序依次生效,结果与 SwiftUI 一致。

  • 更好的结构化与复用 可将复杂的修饰器链提取为变量或函数,增强可维护性与复用性。

  • 更贴近 SwiftUI 如果你熟悉 SwiftUI,会发现 modifiers() 的调用方式几乎一模一样。


使用示例

示例 1:多层背景与内边距嵌套

1<VStack
2  modifiers={
3    modifiers()
4      .padding()
5      .background("red")
6      .padding()
7      .background("blue")
8  }
9>
10  <Text>Hello</Text>
11</VStack>

等价于 SwiftUI:

1Text("Hello")
2  .padding()
3  .background(Color.red)
4  .padding()
5  .background(Color.blue)

示例 2:提取并复用修饰器链

1const cardStyle = modifiers()
2  .padding(12)
3  .background("gray")
4  .cornerRadius(8)
5  .opacity(0.9)
6
7<List modifiers={cardStyle}>
8  <Text>Item 1</Text>
9</List>

示例 3:根据条件动态生成修饰器

1const base = modifiers().padding()
2
3if (isDarkMode) {
4  base.background("black")
5} else {
6  base.background("white")
7}
8
9return <HStack modifiers={base}>...</HStack>

使用建议

在以下情况中建议使用 modifiers

  • 需要对视图多次使用同一个修饰器(如 padding()
  • 希望拆分 UI 样式并复用一套完整的样式链
  • 需要控制修饰器的执行顺序
  • 需要在运行时根据条件动态组装修饰器

支持的修饰器方法

ViewModifiers 提供了超过 200 个修饰器方法,覆盖:

  • 布局类paddingframeoffsetpositionzIndex
  • 样式类backgroundforegroundStyleopacityshadowclipShape
  • 文本字体类fontbolditalickerningunderline
  • 交互事件类onTapGestureonAppearcontextMenu
  • 图表类chartXAxischartYAxisLabelchartSymbolScale
  • 组件专属类:如 widgetURLwidgetBackground

可查阅完整的 ViewModifiers 类型定义以获取所有支持的方法。


注意事项

  • 每次调用 modifiers() 会创建一个新的实例,不会与其他实例合并。
  • 修饰器的执行顺序完全依赖于调用顺序。
  • 当需要同一个修饰器在同一个视图上多次使用时,可以使用 modifiers 进行链式调用。

通过 modifiers,你可以实现更灵活、结构化、可复用的 UI 风格配置,构建贴近 SwiftUI 的声明式体验。适合构建复杂布局、响应式风格以及脚本组件样式抽象。